﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Reflection;
/*
 * File name : ConvertClassToArray
 * Description: Lấy các tham số và gắn vào biến mãng sử dụng trong truy vấn Store Procuduce có sử dụng kỹ thuật flag
 * Release date :16-11-2011
 * Author :Hà Ngọc Thành 
 * Company : 
 * Project:Search Engine 
 */
namespace DAL
{

    public class ConvertClassToArray
    {
        /*
         * Method : GetParamName
         * Description : Lấy tên toàn bộ property của 1 object bất kỳ
         * param : 1 đối tượng bất kỳ 
         * Return type : 1 Mãng kiểu String 
         */
        /// <summary>
        /// Lấy tên toàn bộ property của 1 object bất kỳ
        /// </summary>
        /// <param name="item">Name Object</param>
        /// <returns>Arrary String</returns>
        public static String[] GetParamName(object item)
        {
            String[] d;
            // define type
            Type t = item.GetType();
            MemberInfo[] member = t.GetProperties();
            int i=0;
            d = new string[member.Length];
            foreach (MemberInfo m in member)
            {
                d[i] = m.Name;
                i++;
            }
            return d;
        }
        /*
        * Method : GetParamName
        * Description : Lấy tên toàn bộ property của 1 object bất kỳ có thêm biến flag 
        * param : 1 đối tượng bất kỳ 
        * Return type : 1 Mãng kiểu String 
        */
        /// <summary>
        /// Lấy tên toàn bộ property của 1 object bất kỳ có thêm biến flag 
        /// </summary>
        /// <param name="item">Name Object</param>
        /// <param name="flag">flag on store proceduce</param>
        /// <returns>Arrary String</returns>
        public static String[] GetParamName(object item,int? flag)
        {
            String[] d = GetParamName(item);
            int length = d.Length;
            string[] rs = new string[length + 1];
            for (int i = 0; i < rs.Length; i++)
            {
                if (i < length)
                {
                    rs[i] = d[i];
                }
                else
                {
                    rs[i] = "flag";
                }
            }
            return rs;

        }
        /*
       * Method : GetValues
       * Description : Lấy giá trị toàn bộ property của 1 object bất kỳ 
       * param : 1 đối tượng bất kỳ 
       * Return type : 1 Mãng kiểu String 
       */
        /// <summary>
        /// Lấy giá trị toàn bộ property của 1 object bất kỳ có thêm biến flag 
        /// </summary>
        /// <param name="item">Name Object</param>
        /// <returns>object Array</returns>
        public static object[] GetValues(object item)
        {
            Type t = item.GetType();
            String[] name = GetParamName(item);
            object[] d = new object[name.Length];
            for (int i = 0; i < name.Length; i++)
            {
                PropertyInfo info = t.GetProperty(name[i]);
                d[i] =  info.GetValue(item, null);
            }
            return d;
        }
        /*
       * Method : GetValues
       * Description : Lấy giá trị toàn bộ property của 1 object bất kỳ có thêm biến flag 
       * param : 1 đối tượng bất kỳ 
       * Return type : 1 Mãng kiểu String 
       */
        /// <summary>
        /// Lấy giá trị toàn bộ property của 1 object bất kỳ có thêm biến flag 
        /// </summary>
        /// <param name="item">Name Object</param>
        /// <param name="flag">flag in store procuduce</param>
        /// <returns>object Array</returns>
        public static object[] GetValues(object item, int flag)
        {
            object[] d = GetValues(item);
            object[] rs = new object[d.Length+1];
            for (int i = 0; i < rs.Length; i++)
            {
                if (i < d.Length)
                    rs[i] = d[i];
                else
                    rs[i] = flag;
            }
            return rs;
        }
    }
}
